package com.gogowan.agroenterprise.utils;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * 书签和历史数据库
 * @author zk
 * @see SQLiteOpenHelper是一个辅助类，用来管理数据库的创建和版本他，它提供两个方面的功能
 * 第一，getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象，通过该对象可以对数据库进行操作
 * 第二，提供了onCreate()、onUpgrade()两个回调函数，允许我们再创建和升级数据库时，进行自己的操作
 */
public class DBHelper extends SQLiteOpenHelper {
	private static final int VERSION = 2;
	public static final String DB_NAME = "record.db";
	public static final String SHUQIAN_TABLE_NAME = "shuqian";
	public static final String HISTORY_TABLE_NAME = "history";
	public static final String ID="id";
	public static final String NAME="name";
	public static final String URL="url";
	public static final String DATE="date";
	public static final String SHUQIAN_HISTORY_ID="history_id";
	public static final String LASTDATE="lastdate";
	public static final String COUNT="browsecount";
	/**
	 * 在SQLiteOpenHelper的子类当中，必须有该构造函数
	 * @param context	上下文对象
	 * @param name		数据库名称
	 * @param factory
	 * @param version	当前数据库的版本，值必须是整数并且是递增的状态
	 */
	public DBHelper(Context context, String name, CursorFactory factory,
			int version) {
		//必须通过super调用父类当中的构造函数
		super(context, name, factory, version);
	}
	
	/**构造函数
	 * @param context 上下文对象
	 * @param name 数据库名称
	 * @param version 当前数据库的版本
	 */
	public DBHelper(Context context, String name, int version){
		this(context,name,null,version);
	}

	/**构造函数
	 * @param context 上下文对象
	 * @param name 数据库名称
	 */
	public DBHelper(Context context, String name){
		this(context,name,VERSION);
	}
	/**构造函数
	 * @param context 上下文对象
	 */
	public DBHelper(Context context){
		this(context,DB_NAME,VERSION);
	}

	//该函数是在第一次创建的时候执行，实际上是第一次得到SQLiteDatabase对象的时候才会调用这个方法
	@Override
	public void onCreate(SQLiteDatabase db) {
		//System.out.println("create a database");
		//execSQL用于执行SQL语句
		try{
		db.execSQL("create table "+SHUQIAN_TABLE_NAME+"("+ID+" integer primary key autoincrement, "+SHUQIAN_HISTORY_ID+" varchar(10), "+NAME+" varchar(20),"+URL+" varchar(2048),"+DATE+" date,"+LASTDATE+" date,"+COUNT+" integer)");
		db.execSQL("create table "+HISTORY_TABLE_NAME+"("+ID+" integer primary key autoincrement,"+NAME+" varchar(20),"+URL+" varchar(2048),"+DATE+" date,"+LASTDATE+" date,"+COUNT+" integer)");
		}catch(IllegalStateException sql)
    	{
    		//不做处理
	    }catch(SQLException sql)
    	{
    		//不做处理
    	}
	}

	//更改数据库版本的操作 
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		//System.out.println("upgrade a database");
		try {
			switch (oldVersion) {
			case 1:
				db.execSQL("ALTER TABLE " + SHUQIAN_TABLE_NAME + " ADD "
						+ SHUQIAN_HISTORY_ID + " varchar(10);");
				break;
			default:
				break;
			}
		} catch (IllegalStateException sql) {
			// 不做处理
		} catch (SQLException sql) {
			// 不做处理
		}
//		//增加列名
//		 try{
//			   db.execSQL("ALTER TABLE " + SHUQIAN_TABLE_NAME +" ADD lastdate date" );
//			   db.execSQL("ALTER TABLE " + SHUQIAN_TABLE_NAME +" ADD browsecount integer" );
//			   db.execSQL("ALTER TABLE " + HISTORY_TABLE_NAME +" ADD lastdate date" );
//			   db.execSQL("ALTER TABLE " + HISTORY_TABLE_NAME +" ADD browsecount integer" );			  
//			   }catch(SQLiteException e){
//			   //e.printStackTrace();
//				  Log.d("e", e.toString());
//			  }
		//删除表
//		db.execSQL("DROP TABLE IF EXISTS "+SHUQIAN_TABLE_NAME);  
//		db.execSQL("DROP TABLE IF EXISTS "+HISTORY_TABLE_NAME);  
//		onCreate(db);
	}
}
